
        <html>
			<head>
			     <title>A Security Analysis Of Browser Extensions - DBA</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/web/2918">http://drops.wooyun.org/web/2918</a></h1>
				
      <p>
        <h2>0x00 前言</h2>

<hr />

<p>浏览器扩展安全似乎讨论的不多，drops上也没有相关的文章，我只在知乎上搜到一篇关于扩展问题的实例文章，<a href="http://zhuanlan.zhihu.com/wooyun/19773919">链接请点我</a>。因此，我搜索了一些关于扩展安全的研究报告，如下便是其中一篇，来自于康奈尔大学图书馆（跟伯克利并列的学校哦），在大批量分析扩展安全性和绕过静默安装的方法上给我们提供了非常好的思路，我认为是值得学习的，故翻译下来分享给大家。 原文：<a href="http://arxiv.org/abs/1403.3235">http://arxiv.org/abs/1403.3235</a></p>

<h2>0x01 摘要</h2>

<hr />

<p>浏览器扩展（通常称为插件或者加载项）本质上是让开发者给浏览器附加功能的一小段代码。然而,扩展也是有安全代价的：用户必须信任插件开发者。我们来看看这种信任关系是如何被打破，从而造成恶意的扩展被安装到用户的浏览器。同样，我们也看看在各种浏览器中扩展的静默安装方法以及浏览器本身是如何预防静默安装的。</p>

<p>我们通过比较多种浏览器的扩展机制，试图创建了一种保持插件在浏览器中的权限最小化规则，然后以此为依据分析了各种各样的插件，以便观察最小化权限规则是否满足插件对权限的要求。</p>

<!--more-->

<p>同样的，我们也对多种浏览器上的很多插件做了调查，查明了可能造成攻击的根本原因。举个例子，如果开发者的账号被黑，那么此开发者开发的扩展中是可能被嵌入恶意代码的。我们还发现了权限滥用问题，调查到很多扩展会申请超出本身使用的更多的权限。</p>

<p>最后提供了一个解决方案让用户在下载扩展前检查其可靠性。</p>

<h2>0x02 介绍</h2>

<hr />

<p>浏览器扩展现在已经极度受欢迎，超过33%的Chrome浏览器使用者不止安装了一个扩展。在正常的网站上，扩展（也称插件）是一小段能允许用户修改浏览器行为的代码。大多数插件使用javascript编写，当然也有其他的脚本。当扩展被如此广泛的在桌面操作系统中使用的时候，在移动浏览器中，仍处在最初的阶段，只有在一小部分移动浏览器会支持第三方扩展，比如Mozilla’s Firefox for Android and Dolphin 由于时间的关系，在此文中，我们仅以Google Chrome和Firefox为例，其他浏览器暂时不作考虑。</p>

<p>大多数浏览器在它们的扩展平台中都有自己的安全模型。此文中，我们分析了多种由于扩展造成的或可能造成的漏洞。同时，基于测试结果验证了这些安全模型的有效性。</p>

<h2>0x03 安全概述</h2>

<hr />

<p>1、Google Chrome 使用三种方式保证扩展的安全性。</p>

<pre><code>1）关键字隔离。扩展的脚本不能直接访问当前页面的DOM树，但是能复制一份，间接的访问。页面javascript代码的执行跟扩展javascript代码严格分离。否则，会造成大量的攻击向量失效。  
2）权限隔离。Chrome的扩展运行在两种不同的权限机制中。一种是内容脚本（content-scripts），另一种是核心扩展脚本（core-extension scripts）。核心扩展脚本能够直接访问Chrome的本地API，内容脚本则不能，但是能通过与核心扩展脚本消息通信，间接的访问Chrome的本地API。使得攻击过程必须经过消息接口的方式实现，从而加强了模型的安全性。  
3）权限模型。扩展必须先声明使用的权限，然后浏览器会匹配相应的权限模型用于限制扩展。所以，如果是核心扩展脚本被发现了漏洞，攻击者还是会被权限模型限制。
</code></pre>

<p><img src="http://static.wooyun.org/201409/2014090110151131712.png" alt="2014090110151131712.png" /></p>

<p>图1：Google Chrome的扩展架构图</p>

<p>2、威胁。</p>

<p>在扩展中有两种可能的攻击方式：</p>

<pre><code>1）恶意扩展：理论上，攻击者是能够在用户的浏览器上安装具有很大破坏力的恶意扩展的。在这之前，有少数扩展被查出盗取银行密码和其他一些安全性较高的网站的敏感信息。尽管浏览器及时的屏蔽了这些扩展，但是威胁仍然存在。  
我们来看看恶意扩展的安装机制，扩展可以通过其他的可执行文件实现静默安装。Chrome和Firefox都提供有静默安装的接口，但是在安装之前会弹出确认窗口给用户提示。  
2）扩展本身的漏洞：由于开发者本身编码不够安全，造成扩展本身也是可能存在安全漏洞的。在Chrome Web商店中，有超过10000个的扩展，其中有一些是本身就有安全漏洞。之前一项研究表明，即使是最受欢迎的、甚至是Google公司自己开发的扩展，都存在过安全漏洞。这些扩展能被恶意的网站利用，主要包括非法处理用户的输入，未过滤或者未处理过的用户输入在扩展中被使用，扩展元数据被攻击能方式。  
</code></pre>

<p>我们没有研究Firefox的扩展，因为Firefox对扩展没有权限管理。因此，所有的扩展都能读写用户的家目录。这导致Firefox的扩展权限过大，也造成了更多的漏洞。</p>

<h2>0x04 方式</h2>

<hr />

<p>我们使用如下操作：</p>

<pre><code>1）在Chrome和Firefox下，用一种方式绕过浏览器对于静默安装的提示。  
2）分析Chrome Web 商城里排名前10000扩展的代码。分析在某些攻击向量和权限滥用的情况下，扩展的代码和执行。  
3）创建一种方法，在安装扩展前，观察其在经过上面两步操作后的结果。这能更好的帮助用户分析，以决定是否安装该扩展。我们研究结果表明，数个扩展会申请大于它们自身使用的权限。
</code></pre>

<h2>0x05 统计</h2>

<hr />

<p>我们总共从Chrome Web 商店下载了10047个扩展。它们以受欢迎的程度排序，因此能够代表扩展的使用频率是最高的。</p>

<p>1）内容安全策略（Content-Security Policy）</p>

<p>内容安全策略作为一个新特性被引入到Chrome的第18个版本，通过其严格的策略，阻止了大多数如上我们讨论的漏洞情况。我们发现有4079个扩展已经升级它的manifest到第二版，从而强制使内容安全策略得以被应用。尽管这些扩展仍然存在权限滥用和自身漏洞，但是也比其他未应用该策略的扩展要更加安全。<br />
在10047个扩展中，我们成功扫描的有9558个，其他的因为错误的manifest文件和部分文件丢失未能成功分析。</p>

<p>2）权限滥用</p>

<p>通过解析manifest.json文件，我们扫描了这些扩展申请的权限。该方法来自Google Chrome开发者网站页面：“所有的扩展，浏览器应用程序和主题都有一个json格式的manifest文件，以manifest.l命名，或者missing.json，用于提供扩展的重要信息。”</p>

<p>然后跟扩展实际使用的权限匹配。Chrome的安全策略仅允许‘backgroud-scripts’直接访问核心的API。通过解析所有文件源码中的‘backgroud-scripts’段，分析出扩展需要实际需要的权限。</p>

<p>我们发现这些扩展中，超过一半的都申请了大于实际使用必须的权限。其中大多数多申请了一到两个额外的权限，这可以归结于开发者的水平和不严谨。另外有192个扩展多申请了4个或更多的权限，体现出较为严重的安全问题。</p>

<p>在统计中，我们没有包含那些不能被滥用的权限。比如，通知功能的权限，能被允许使用HTML5的通知接口，但是无法被滥用。有超过300个扩展申请了该权限，却并未使用，我们也就没有将这些扩展列入统计结果。尽管它们不会造成安全问题，但在申请权限中，这也是个不好的习惯。<br />
如下是我们统计的数据：</p>

<p><img src="http://static.wooyun.org/201409/2014090110162199504.png" alt="2014090110162199504.png" /></p>

<p>下面是一个权限滥用的扩展数量和申请的额外的权限数量对比的树状分布图，Y坐标是以10为底对数的值。</p>

<p><img src="http://static.wooyun.org/201409/2014090110165751905.png" alt="2014090110165751905.png" /></p>

<p>很多不合格的扩展会申请极度敏感的权限，这样就能很容易的被黑客和居心叵测的开发者利用这些权限获取用户的账号信息，如浏览器的cookie。</p>

<p>3）网络层面的攻击</p>

<p>我们发现有一些扩展在HTTP网络层面也存在漏洞，它们会通过HTTP协议加载远程脚本。由于技术原因，无法统计到所有产生的HTTP请求，但还是发现了146个扩展往外部发起过HTTP请求。我们只统计了直接包含<code>&lt;script&gt;</code>标签的的请求，如果加上包含XHR的请求（很多扩展会使用），这个数字会高很多。</p>

<p>我们没能是能够用程序来统计包含XHR的请求，如果通过手动的方式统计，会是一份吃力的工作。这是由于很多请求是直接使用javascript发起，或者使用<code>&lt;img&gt;</code>标签发起，如JQuery、MooTools等其他javacript框架。我们打算通过分析所有的URL字符串，假定其为请求的地址，结果发现导致了大量的错误，从而否定了这个做法。</p>

<p>网络层面的攻击包括中间人攻击（MitM）,如果利用这种方式，将会允许远程代码执行，而当问题出在核心扩展部分，这意味着所有的权限都能被滥用。举个例子，中间人攻击的方式能复制用户浏览器的cookie值，然后发送给攻击者本身。这将会导致类似于“圣杯”攻击，从而危及到用户所有的账号。</p>

<h2>0x06 工作模型</h2>

<hr />

<h3>1、静默安装</h3>

<p>Firefox和Chrome都有静默安装的方式。正常情况下，这就涉及到注册表编辑。浏览器启动时，会检查注册表中相应的键值，当安装扩展时，会弹出警告窗口。只有用户允许了，扩展才会被安装。</p>

<p>我们创建了一种不需要弹出警告窗口的机制，通过不同的方式对两种浏览器进行测试。</p>

<pre><code>1）Firefox：Firefox会在用户的配置目录下建立一个叫extensions.sqlite的文件用于保存所有已经安装的扩展的列表。所以我们直接往这个文件里写假的扩展安装信息。这种方法是基于Julien Sobrier早期完成的研究。这样便很简单的让我们静默安装扩展，而不弹窗提示。  
2）Chrome：Chrome会在用户的数据目录下建立一个偏好设置文件，用于保存已安装扩展的列表。该文件是以JSON格式保存，我们往里面写入假的扩展信息，当浏览器启动时，显示我们写入假的扩展已经被安装了。  
</code></pre>

<p>在对静默安装机制上的研究表明，浏览器现在的方式还不够完善，很容易就被绕过。当然，在浏览器对应bypass静默安装方面，这永远是一个猫鼠游戏。</p>

<p>2、扩展检查</p>

<p>我们通过设置一个在线的扩展检查数据库，让用户使用我们的研究结果。用户能轻松的找到对应扩展的权限滥用和外部HTTP请求分析。我们也打算尽快发布到网站上。</p>

<p>网站通过读取manifest.json文件来对比扩展实际需要的权限和申请的权限，分析过后将其存入数据库中，并提供HTTP方式的接口访问。</p>

<h2>0x07 结论</h2>

<hr />

<p>我们成功的开发出了脚本，实现了Chrome和Firefox扩展的无警告静默安装，证明了现在的防范机制还不够完善。</p>

<p>在分析的扩展中，大约有50%的存在权限滥用的情况。虽然很难给出准确的数字，但是还是可以得出结论，有相当一部分的扩展会因为权限滥用的情况而受到攻击。我们也认识到，内容安全策略（Content-Security Policy）在保证扩展安全中的确是一个高效的方案。Google Chrome Web商店也会因为该策略的实行更加安全。</p>

<p>最后，附上这个项目的github上的源码地址：<a href="https://github.com/captn3m0/nullcon2014">https://github.com/captn3m0/nullcon2014</a></p>

<pre><code>[1]: Carlini, Nicholas, Adrienne Porter Felt, and David Wagner. “An evaluation of the google chrome extension security architecture.“ Proceedings of the 21st USENIX Conference on Security. 2012. 
[2]: Sobrier, Julien. “How to install silently malicious extensions for Firefox”ZScaler Blog. 25 Sep. 2012. 
[3]: Aaron Boodman, “A Year of Extensions”. The Chromium Blog. 9 Dec 2010. 
[4]: Siegler, M. G. “Chrome Appears To Have Hit 10,000 Extensions, Inching Closer To Firefox.“ TechCrunch. N.p., 10 Dec. 2010.
</code></pre>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          